#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
简化版ERNIE故事生成器
专注于三次转折的完整故事生成，不依赖外部深度学习库
"""

import random
import json
import os

class SimpleERNIEGenerator:
    """简化版ERNIE故事生成器"""
    
    def __init__(self):
        """初始化生成器"""
        self.story_templates = self._load_story_templates()
        self.characters = ["小兔子", "小熊", "小鸟", "小狐狸", "小松鼠", "小鹿", "小猫", "小狗", "小象", "小猴子"]
        self.locations = ["神秘森林", "彩虹山谷", "星光湖畔", "魔法花园", "云朵城堡", "水晶洞穴", "翡翠草原", "银河小镇"]
        self.conflicts = ["失去了珍贵的友谊", "迷失在黑暗中", "面临巨大的挑战", "遭遇可怕的敌人", "失去了重要的东西", "陷入了困境"]
        self.helpers = ["智慧的老树", "善良的仙女", "勇敢的朋友", "神奇的精灵", "温暖的阳光", "闪亮的星星"]
        self.solutions = ["用爱心感化", "用智慧解决", "用勇气面对", "用团结战胜", "用坚持克服", "用善良化解"]
        self.lessons = ["友谊的珍贵", "勇气的力量", "智慧的重要", "善良的美好", "坚持的意义", "团结的力量"]
        
    def _load_story_templates(self):
        """加载故事模板"""
        return {
            "adventure": {
                "setup": "从前，在{location}住着一只{character}。{character}一直梦想着{dream}，每天都在为此努力着。",
                "twist1": "有一天，{character}终于踏上了实现梦想的旅程。但是，{character}很快就{conflict1}，第一次尝试以失败告终。{character}感到非常沮丧，几乎想要放弃。",
                "twist2": "就在{character}准备放弃的时候，{helper}出现了，告诉{character}还有另一种方法。{character}重新燃起了希望，决定再试一次。但这次，{character}又遇到了{conflict2}，情况变得更加困难。",
                "twist3": "在最关键的时刻，{character}想起了{memory}，突然明白了真正的解决方法。{character}不再依靠外力，而是{solution}，最终克服了所有困难。",
                "resolution": "通过这次冒险，{character}不仅实现了梦想，更重要的是学会了{lesson}。从此以后，{character}成为了{location}里最受尊敬的居民，经常帮助其他遇到困难的小动物。"
            },
            "friendship": {
                "setup": "在美丽的{location}里，住着一只{character}。{character}性格{personality}，但一直没有真正的朋友，感到很孤独。",
                "twist1": "一天，{character}遇到了另一只小动物{friend}。起初他们相处得很好，{character}以为终于找到了朋友。但是，因为{misunderstanding}，他们发生了激烈的争吵，{friend}愤怒地离开了。",
                "twist2": "{character}意识到自己的错误，决定去道歉。但是当{character}找到{friend}时，发现{friend}正在{danger}。{character}毫不犹豫地去帮助，但在救援过程中，{character}自己也陷入了困境。",
                "twist3": "就在最危险的时刻，{friend}不计前嫌，冒着危险来救{character}。两个小动物互相帮助，{cooperation}，最终都脱离了危险。",
                "resolution": "经过这次患难与共的经历，{character}和{friend}成为了最好的朋友。他们明白了{lesson}，从此在{location}里快乐地生活着，成为了其他小动物学习的榜样。"
            },
            "growth": {
                "setup": "小{character}是{location}里最{trait}的小动物。但是，{character}有一个很大的缺点：{weakness}，这让{character}经常遇到麻烦。",
                "twist1": "有一次，因为{weakness}，{character}犯了一个大错误：{mistake}。这个错误让{character}失去了{loss}，{character}感到非常后悔和难过。",
                "twist2": "为了弥补错误，{character}决定{action}。但是在努力的过程中，{character}又因为{weakness}而{setback}，情况变得更糟了。{character}开始怀疑自己是否真的能改变。",
                "twist3": "在最低落的时候，{character}遇到了{mentor}，{mentor}告诉{character}：'{wisdom}'。{character}突然明白了，开始{transformation}，用全新的方式面对挑战。",
                "resolution": "最终，{character}不仅解决了所有问题，还{achievement}。更重要的是，{character}克服了{weakness}，学会了{lesson}。现在的{character}成为了{location}里大家都喜爱和尊敬的小动物。"
            }
        }
    
    def generate_story(self, theme="adventure", character_name=""):
        """生成三次转折的完整故事"""
        try:
            # 选择故事类型
            if theme not in self.story_templates:
                theme = "adventure"
            
            template = self.story_templates[theme]
            
            # 生成故事元素
            character = character_name if character_name else random.choice(self.characters)
            location = random.choice(self.locations)
            
            # 根据主题生成特定元素
            story_elements = self._generate_theme_elements(theme, character, location)
            
            # 构建完整故事
            story_parts = []
            
            # 开端
            setup = template["setup"].format(**story_elements)
            story_parts.append(setup)
            
            # 第一次转折
            twist1 = template["twist1"].format(**story_elements)
            story_parts.append(twist1)
            
            # 第二次转折
            twist2 = template["twist2"].format(**story_elements)
            story_parts.append(twist2)
            
            # 第三次转折
            twist3 = template["twist3"].format(**story_elements)
            story_parts.append(twist3)
            
            # 结局
            resolution = template["resolution"].format(**story_elements)
            story_parts.append(resolution)
            
            return "\n\n".join(story_parts)
            
        except Exception as e:
            print(f"故事生成错误: {e}")
            return self._generate_fallback_story(character_name)
    
    def _generate_theme_elements(self, theme, character, location):
        """根据主题生成故事元素"""
        base_elements = {
            "character": character,
            "location": location,
            "lesson": random.choice(self.lessons)
        }
        
        if theme == "adventure":
            base_elements.update({
                "dream": random.choice(["成为最勇敢的探险家", "找到传说中的宝藏", "拯救森林", "帮助所有需要帮助的朋友"]),
                "conflict1": random.choice(["遇到了可怕的暴风雨", "迷失在黑暗的森林里", "被巨大的石头挡住了去路", "遭遇了凶猛的野兽"]),
                "helper": random.choice(self.helpers),
                "conflict2": random.choice(["陷入了更深的困境", "发现前方有更大的危险", "体力不支快要倒下", "失去了重要的工具"]),
                "memory": random.choice(["妈妈说过的话", "朋友的鼓励", "内心的勇气", "对家人的爱"]),
                "solution": random.choice(self.solutions)
            })
        
        elif theme == "friendship":
            base_elements.update({
                "personality": random.choice(["善良", "活泼", "聪明", "勇敢", "温柔"]),
                "friend": random.choice(self.characters),
                "misunderstanding": random.choice(["误会对方偷了自己的东西", "认为对方不够关心自己", "因为小事发生争执", "互相不理解对方的想法"]),
                "danger": random.choice(["被困在深坑里", "迷路找不到回家的路", "被坏人追赶", "生病需要帮助"]),
                "cooperation": random.choice(["齐心协力", "互相配合", "发挥各自的优势", "团结一心"])
            })
        
        elif theme == "growth":
            base_elements.update({
                "trait": random.choice(["聪明", "可爱", "活泼", "善良"]),
                "weakness": random.choice(["太骄傲", "不够细心", "容易生气", "不愿意听别人的建议"]),
                "mistake": random.choice(["伤害了最好的朋友", "破坏了重要的东西", "让大家失望了", "错过了重要的机会"]),
                "loss": random.choice(["朋友们的信任", "珍贵的礼物", "参加比赛的机会", "大家的尊重"]),
                "action": random.choice(["努力弥补错误", "寻找解决办法", "向大家道歉", "努力改变自己"]),
                "setback": random.choice(["又犯了同样的错误", "让情况变得更糟", "失去了更多朋友", "遇到了新的困难"]),
                "mentor": random.choice(["智慧的老爷爷", "慈祥的奶奶", "经验丰富的老师", "善良的长者"]),
                "wisdom": random.choice([
                    "真正的勇气不是不害怕，而是害怕时仍然坚持做对的事",
                    "每个人都会犯错，重要的是从错误中学习",
                    "改变自己很难，但只要坚持就一定能做到",
                    "真正的朋友会在你最需要的时候支持你"
                ]),
                "transformation": random.choice(["认真反思自己的行为", "努力控制自己的情绪", "学会倾听别人的意见", "用心对待每一个朋友"]),
                "achievement": random.choice(["赢得了大家的原谅", "找回了失去的友谊", "成为了更好的自己", "帮助了其他需要帮助的小动物"])
            })
        
        return base_elements
    
    def _generate_fallback_story(self, character_name="小主角"):
        """生成备用故事"""
        character = character_name if character_name else "小兔子"
        return f"""从前，有一只名叫{character}的小动物，住在美丽的森林里。

{character}一直梦想着成为森林里最勇敢的探险家。有一天，{character}听说森林深处有一个神秘的宝藏，决定去寻找它。

但是在路上，{character}遇到了可怕的暴风雨，迷失了方向。{character}感到害怕和绝望，几乎想要放弃。

就在这时，一只智慧的老猫头鹰出现了，告诉{character}："真正的宝藏不在远方，而在你的内心。"但{character}不理解这句话的意思，继续前行，却陷入了更大的困境。

在最危险的时刻，{character}想起了妈妈的话："勇气不是不害怕，而是害怕时仍然前进。"{character}突然明白了，用自己的勇气和智慧找到了回家的路。

最终，{character}明白了真正的宝藏就是勇气和智慧。从此以后，{character}成为了森林里最受尊敬的小动物，经常帮助其他迷路的朋友。"""

# 测试函数
if __name__ == "__main__":
    generator = SimpleERNIEGenerator()
    
    print("=== 冒险故事测试 ===")
    story1 = generator.generate_story("adventure", "小熊")
    print(story1)
    
    print("\n=== 友谊故事测试 ===")
    story2 = generator.generate_story("friendship", "小兔子")
    print(story2)
    
    print("\n=== 成长故事测试 ===")
    story3 = generator.generate_story("growth", "小狐狸")
    print(story3)